#profile/models.py
# -*- coding: utf-8 -*-
import re
from django.db import models
from django.core.urlresolvers import reverse
from django.contrib.auth.models import User, UserManager
from avatar.models import Avatar
from photologue.models import Gallery


class DeviceType(models.Model):
    typename = models.CharField(max_length=100,
                        verbose_name=u'Тип кухонного прибора',
                        help_text=u'Укажите тип кухонного прибора', blank=False)

    def __unicode__(self):
           return self.typename

    class Meta:
        verbose_name_plural = u'Типы кухонных приборов'
        verbose_name = u'Тип кухонного прибора'

class Devices(models.Model):
    devname = models.CharField(max_length=100,
                        verbose_name=u'Кухонный прибор',
                        help_text=u'Используемая кухонный прибор', blank=False)
    devtype = models.ForeignKey(DeviceType, verbose_name=u'Тип кухонного прибора',
                        help_text=u'Укажите тип кухонного прибора', blank=False)

    def __unicode__(self):
           return self.devname

    class Meta:
        verbose_name_plural = u'Кухонные приборы'
        verbose_name = u'Кухонный прибор'


SEX_CHOISES = (
    ('m', u'Мужчина'),
    ('f', u'Женщина'),
    ('n', u'Не определился'),
)

EXPERIENCE_CHOISES = (
    (0, u'Менее года'),
    (1, u'Около года'),
    (3, u'Около трех лет'),
    (5, u'Около пяти лет'),
    (10, u'Около десяти лет'),
    (20, u'Около двадцати лет лет'),
    (50, u'Всю жизнь готовлю'),
)

class CustomUser(User):
    objects = UserManager()
    sex = models.CharField(max_length=1, choices=SEX_CHOISES,
                        verbose_name=u'Пол', default='n',
                        help_text=u'Укажите ваш пол', blank=False)
    residence = models.CharField(max_length=30, verbose_name=u'Населённый пункт',
                        help_text=u'Укажите населенный пункт вашего проживания',
                        blank=True,
                        null=True, default = None)
    device =  models.ManyToManyField(Devices, blank=True,
                        null=True, default = None)
    description = models.TextField(u'Коротко о себе', blank=True)
    avatar = models.ForeignKey(Avatar, blank=True,
                        null=True, default = None)
    experience = models.IntegerField(u'Кулинарный стаж', choices=EXPERIENCE_CHOISES,
                        default='1', help_text=u'Укажите ваш кулинарный стаж', blank=False)
    # rating = models.IntegetField()  # можно использовать стороннее приложение
    gallery = models.ForeignKey(Gallery, blank=True, null=False)
    recipes_count = models.IntegerField(u'Количество опубликованных рецептов',
                        default='0', blank=False, null=True)

    def __unicode__(self):
           return u'%s %s' % (self.first_name, self.last_name)

    def save(self, *args, **kwargs):
        if not self.gallery:
            gallery = Gallery.objects.create(title=name,
                            title_slug=name,
                            is_public=True)
            self.save({'gallery': gallery})
        super(CustomUser, self).save(*args, **kwargs)

    def get_absolute_url(self):
        return reverse('users:profiles', args=(self.pk,))

    class Meta:
        verbose_name_plural = u'Профили пользователей'
        verbose_name = u'Профиль пользователя'


def get_gallery_name(name):
    return '-'.join((name, 'gallery'))

from django.db.models.signals import post_save, post_delete
def create_user_profile(sender, instance, created, **kwargs):
    if created:
        values = {}
        for field in sender._meta.local_fields:
            values[field.attname] = getattr(instance, field.attname)
        if not getattr(instance, 'gallery', None):
            name = get_gallery_name(values.get('username'))
            try:
                gallery = Gallery.objects.get(title_slug=name)
            except:
                gallery = Gallery.objects.create(title=name,
                            title_slug=name,
                            is_public=True)
            values['gallery'] = gallery

        user = CustomUser(**values)
        user.save()
        #UserProfile.objects.create(user=instance)

def delete_user_profile(sender, instance, **kwargs):
    try:
        name = get_gallery_name(getattr(instance, 'username'))
        Gallery.objects.get(title_slug=name).delete()
    except:
        pass
    #instance.gallery.objects.delete()

post_save.connect(create_user_profile, sender=User)
post_delete.connect(delete_user_profile, sender=User)
